package io.terminus.spzx.manager.helper;

import io.terminus.spzx.model.entity.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * @author lichunlong lcl253137@alibaba-inc.com
 * @desc 封装树形菜单数据Util工具类
 * @date 2024-07-29
 */
public class MenuHelper {

    /**
     * 递归实现封装过程
     *
     * @param sysMenuList 菜单列表
     * @return 封装后的菜单列表
     */
    public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {
        // 创建List集合，用于封装最终的数据
        List<SysMenu> treeList = new ArrayList<>();
        // 遍历菜单集合
        for (SysMenu sysMenu : sysMenuList) {
            // 找到递归操作入口，第一层的菜单
            if (sysMenu.getParentId() == 0) {
                treeList.add(findChildren(sysMenu, sysMenuList));
            }
        }
        return treeList;
    }

    /**
     * 递归查找下层菜单
     *
     * @param sysMenu     第一级的父菜单
     * @param sysMenuList 子菜单集合
     * @return 封装后的父菜单
     */
    public static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {
        sysMenu.setChildren(new ArrayList<>());

        for (SysMenu iteratorSysMenu : sysMenuList) {
            // sysMenu的id值和sysMenuList中parentId相同
            if (sysMenu.getId().longValue() == iteratorSysMenu.getParentId().longValue()) {
                sysMenu.getChildren().add(findChildren(iteratorSysMenu, sysMenuList));
            }
        }
        return sysMenu;
    }
}
